package com.space.school.controller;

import com.space.school.service.LoginService;
import com.space.school.service.impl.LoginServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "loginServlet", value = "/loginServlet")
public class LoginServlet extends HttpServlet {
    LoginService loginService = new LoginServiceImpl();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        Get请求和Post请求的区别
//        1.参数传递方式不同
//        Get请求:参数是通过url的查询字符串以键值对的形式
//        附加在url后面
//        get的请求参数长度是有限制的,一般不适合传递大量数据
//        post 请求 参数是以(form)表单的形式放在请求中进行传递的
//        而不会直接暴漏在url中
//        post 适用于传输大量的数据
//        2.安全性
//        get 会将参数直接显示在url中,不适用传递敏感数据
//        post 不会将参数直接显示在url中,安全性能较高
//        3.缓存
//        get请求 具有缓存性,浏览器会自动缓存get请求的响应结果
//        当再次发送相同的get请求，直接从缓存中获取响应，提高性能
//        post请求，没有缓存性，每次都需要向服务器发送请求
//        4. 幂等性：
//        GET 请求：GET 请求是幂等的，即多次执行相同的 GET 请求，
//        不会对服务器产生影响，也不会改变资源的状态。
//        POST 请求：POST 请求不具备幂等性，多次执行相同的 POST
//       请求可能会导致服务器上的资源状态发生变化。
//        Servlet 小型服务
//        HttpServletRequest
//        客户端的请求 HttpServletRequest
//        对象封装了客户端发送给服务器的http请求的所有信息,
//        并将这些信息参数传递给servlet的doget  dopost方法中
//         HttpServletResponse  响应
//        代表服务器对客户端的响应, 当Servlet处理完客户端的请求后
//        需要向客户端发送响应,我们设置了响应码头,相应码体,响应状态码
        req.getRequestDispatcher("login.jsp").forward(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        String userName = req.getParameter("userName");
        String passWord = req.getParameter("passWord");
        boolean flag = loginService.login(userName, passWord);
        boolean flagUsername = loginService.usernameIsEmpty(userName);
        if (flag){
            req.setAttribute("username",userName);
            req.getRequestDispatcher("list.jsp").forward(req, resp);
        }else {
            if (flagUsername){
                req.setAttribute("message","您输入的密码错误！");
                req.getRequestDispatcher("login.jsp").forward(req, resp);
            }else {
                req.setAttribute("message","你的账户未注册！请先进行注册操作！");
                req.getRequestDispatcher("login.jsp").forward(req, resp);
            }
        }
    }
}
